package fun.easycode.webterminal.common.contract;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.Builder;
import lombok.Data;

import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;

@Data
@Builder
public class PageDTO<T> {
    private Long current;
    private Long size;
    private Long totalSize;
    private Long totalPage;
    private List<T> data;

    /**
     * mybatis-plus page转换PageDto
     * @param page mybatis plus page
     * @param convert 转换关系
     * @param <T> dto类型
     * @param <K> 实体类型
     * @return PageDto
     */
    public static <T,K> PageDTO<T> toPageDto(Page<K> page, Function<K,T> convert){

        List<T> data = page.getRecords().stream().map(convert)
                .collect(Collectors.toList());
        return PageDTO.<T>builder()
                .current(page.getCurrent())
                .size(page.getSize())
                .totalSize(page.getTotal())
                .totalPage(page.getPages())
                .data(data)
                .build();
    }

}
